/**
 * Created with Webstorm 2017.2.1
 * User: xiaogu
 * Date: 2018/3/26
 * Time: 11:47
 *
 */

import Vue from 'vue';
import router from '../router';
import store from '../store';

// 引用layer
import '../../static/js/lib/layer_mobile/need/layer.css';
import layer from '../../static/js/lib/layer_mobile/layer';

// 挂载原型
Vue.prototype.$layer = layer;

// 验证token
export default function checkToken (to, from, next) {
  // 方案一每次刷新授权一次
  // 方案二每次进入授权一次 先采用方案二
  // if (to.query.token) { // 授权之后将isRefreshToken的状态改成true
  //   store.dispatch('sureRefreshToken');
  // }
  // 地址栏是否有token

  if (to.path === '/myself' && !localStorage['wofu_personal']) { // 个人信息缓存被删除
    sessionStorage['wofu_token'] = ''; // 清空token
  }

  if ((!to.query.token && !sessionStorage['wofu_token']) /* || !store.getters.isRefreshToken */) { // 地址栏和缓存都没有token
    // 跳转到登录页面
    store.dispatch('yesLoseToken');
    router.replace({
      path: '/login'
    });
    return false;
  }

  // 以地址栏的token为准
  sessionStorage['wofu_token'] = to.query.token ? to.query.token : sessionStorage['wofu_token'];

  // 获取用户信息
  getCard(to, from, next);
}

// 获取银行卡信息
/* eslint-disable no-unused-vars */
function getCard (to, from, next) {
  // !store.getters.isRefreshCard || !localStorage['wofu_card'] 本次浏览器刷新有没有获取银行卡信息
  // 由于账号可以共存 所以不使用一次刷新只获取一次储蓄卡信息
  // to.path === '/enchashment' || to.path === '/my-debit-card' || to.path === '/my-credit-card' || to.path === '/select-card'
  // 避免一处更改储蓄卡，另一处数据不同步
  // 由于每次都请求银行卡信息体验不好，所以暂时使用每次刷新请求一次银行卡信息的方案，如果后续出错再说
  if (!store.getters.isRefreshCard || !localStorage['wofu_card']) { // 本次刷新是否获取了银行卡信息
    // 没有获取调用ajax获取储蓄卡
    Vue.http.post(store.getters.domain + 'api/VlianbaoCash/deposit', {
      token: sessionStorage['wofu_token']
    }, {
      emulateJSON: true
    }).then((response) => {
      if (response.data.status !== 1 && response.data.status !== -1001) { // 不成功
        let status = response.data.status;
        if (status === -100 || status === -101 || status === -102) { // token失效
          // 设置token失效标志位为true
          store.dispatch('yesLoseToken');
          // 跳转到登录页面
          router.replace({
            path: '/login'
          });
          return false;
        }

        // 打印错误信息
        layer.open({
          content: response.data.msg || '加载失败，请刷新页面',
          skin: 'msg',
          time: 3
        });
        return false;
      }

      // token存在初始化页面完成
      store.dispatch('sureInitialPage');

      // 成功 存缓存
      let wofu_card = {
        deposit: response.data.status === -1001 ? [] : response.data.result
      }
      // 获取信用卡
      Vue.http.post(store.getters.domain + 'api/ZheyangPay/creditList', {
        token: sessionStorage['wofu_token']
      }, {
        emulateJSON: true
      }).then((response) => {
        if (response.data.status !== 1) { // 不成功
          let status = response.data.status;
          if (status === -100 || status === -101 || status === -102) { // token失效
            // 设置token失效标志位为true
            store.dispatch('yesLoseToken');
            // 跳转到登录页面
            router.replace({
              path: '/login'
            });
            return false;
          }
          // 打印错误信息
          layer.open({
            content: response.data.msg || '加载失败，请刷新页面',
            skin: 'msg',
            time: 3
          });
          return false;
        }
        wofu_card.credit = response.data.result;
        localStorage['wofu_card'] = JSON.stringify(wofu_card);
        // 告诉程序本次刷新银行卡数据存储完成
        store.dispatch('sureRefreshCard');

        // 成功
        // 点击取现页面逻辑
        cashoutJudeg(to, from, next);
        return false;
      }, () => {
        layer.open({
          content: '请求失败，请检查网络是否正常',
          skin: 'msg',
          time: 3
        });
      });
    }, () => {
      layer.open({
        content: '请求失败，请检查网络是否正常',
        skin: 'msg',
        time: 3
      });
    });

    return false;
  }
  // 本次刷新获取了银行卡信息直接执行下面的程序
  // 点击取现页面逻辑
  cashoutJudeg(to, from, next);
  return false;
}

// 取现路由判断(公用部分)
function cashoutJudeg (to, from, next) {
  if (to.path !== '/enchashment') { // 不是取现路由继续执行
    if (to.path === '/un-credit-card' && !store.getters.creditCard) { // 是解绑路由且没有解绑信用卡号 不让跳解绑页面
      // 跳转到信用卡列表页面
      router.replace({
        path: '/my-credit-card'
      });
      return false;
    }
    let card = {};
    try {
      card = JSON.parse(localStorage['wofu_card']);
    } catch (e) {
      card = {};
    }
    if (to.path === '/debit-card' && card.deposit.length) { // 绑定储蓄卡路由 防止通过拼链接进入
      router.replace({
        path: '/enchashment'
      });
      return false;
    }
    next();
    return false;
  }
  // 是取现路由执行绑卡判断
  cashoutJump(to, from, next);
  return false;
}

// 取现页面跳转处理
/* eslint-disable no-unused-vars */
function cashoutJump (to, from, next) {
  // 获取银行卡卡缓存
  let card = {};
  try {
    card = JSON.parse(localStorage['wofu_card']);
  } catch (e) {
    card = {};
  }

  if (!card.deposit || card.deposit === null || !card.deposit.length) { // 没有绑定储蓄卡
    router.push({ // 跳转到绑定银行卡路由
      path: '/debit-card'
    });
    return false;
  }
  if (!(card.credit) || card.credit === null || !card.credit.length) { // 没有绑定信用卡
    console.log(to.path, from.path);
    router.push({ // 跳转到绑定信用卡路由
      path: '/credit-card'
    });
    return false;
  }

  // 都绑定了直接跳转选择信用卡页面
  if (from.path !== '/select-card') {
    router.push({
      path: '/select-card'
    });
    return false;
  }

  // 跳转到取现路由
  next();
  return false;
}
